const { generateJWT, verifyJWT } = require('./utils/jwtUtil')
const { STATUS_CODE } = require('./config/config')
const express = require('express')
const app = express()

/**
 * 模拟登录，访问这个接口将直接返回携带JWT的JSON
 */
app.get('/login', (req, res) => {
  const jwt = generateJWT()
  const data = {
    code: STATUS_CODE.success,
    errMsg: 'OK',
    token: jwt
  }
  res.json(data)
})

/**
 * 模拟某个需要验证JWT有效期及合法性的接口
 */
app.get('/doSomething', (req, res) => {
  const bearer = req.get('Authorization') || 'Bearer '
  const token = bearer.split('Bearer ')[1]
  // 如果在header中没有取出Authorization则直接返回401,认为没有权限访问接口
  if (!token) {
    res.status(401).end()
  }
  // 检验Token是否有效
  const result = verifyJWT(token)
  result
  ? res.json({ code: STATUS_CODE.success, errMsg: 'OK', data: 'Token有效可正常访问接口' })
  : res.json({ code: STATUS_CODE.exp, errMsg: 'Invalid Token' })
})

/**
 * 处理错误输入URL的情况返回404
 */
app.get('*', (req, res) => {
  res.status(404)
  res.json({ code: STATUS_CODE.error, errMsg: 'not found' })
})

app.listen(3000)
console.log('Server runing at http://localhost:3000')